数据结构:图及其应用 您所在的位置:网站首页 数据结构 图的实现方法 数据结构:图及其应用

数据结构:图及其应用

2023-11-13 22:04| 来源: 网络整理| 查看: 265

目录

问题:

代码1(这是题目给的代码)

解析:

功能1:

功能2:

代码

代码2(自己写的)

前言

整体思路及运行情况

代码

问题:

背景知识:图的存储、遍历及其应用,图的最短路径等。

目的要求:

掌握图的存储、构建、搜索等操作和应用,能用最短路径及其搜索等算法编制较综合性的程序,求解最优路线问题,进行程序设计、数据结构和算法设计等方面的综合训练。

实验内容:

1.任务:设计一个城市交通咨询模拟系统,利用该系统实现至少两种最优决策:最短路程到达、最省时到达等线路规划。

2.内容:

用户驾车出行由于出行目的的不同对道路路线选择的要求也有不同。例如,有的希望在途中的路程尽可能短,有的则可能希望路程中时间最短。为了能满足广大旅客的需求,编制一个城市交通咨询模拟系统,选取城市部分位置、道路抽象为程序所需要图的顶点和边,并以城市道路长度(路程),道路的某时段的速度等信息作为图结点中的弧信息,为旅客提供这两种最优决策的交通咨询。

实验说明:

    1.输入和输出:

(1)输入形式:

构建图时,输入顶点、弧涉及的信息,包括:起始地、目的地、长度、该弧此时间段的平均速度等信息;用户或者客户要输入出发地和目的地,并选择何种最优决策的路线规划。

(2)输出形式:根据用户需求输出对应信息

输出最短路程所需要的路线信息和最短路程;输出最短时间所需要的路线信息和最短时间。

2.实验要求:

实现一个简单的交互式界面,包括系统菜单、清晰的输入提示等。根据输入的交通图数据,以图形化形式把交通图显示在屏幕上。以图形化形式把最优路线显示在屏幕上。 代码1(这是题目给的代码) 解析:

这个是实验指导书上的源码,挺好用

功能1:

首先建立三个文本文件

count文件里面存的地方的个数,map文件里面存的是一个点到另一个点的距离,map_speed文件里面存的是 一个点到另一个点的时间

看map里面的1,处于第1行第2列,就是第一个点到第二个点的距离是1,

map_speed的1.1就是第1个点到第2个点的花费的时间是1.1

这是我用的测试点

 

下面正式开始测试,首先你要改一下代码中的文件的路径,

 

 

运行结果图

我们可以根据之前的测试图,可以看到它的路线

功能2:

录入路线

把代码中的写入的路径更改一下

这个输入的是两个点是双向都可以通的,点1到点2 的距离是1速度是1,

思路:很简单,就是用弗罗伊德算法,计算出权值最小的路径,顺便用记录中间的一些中转点,在最后的输出路径中输出出来。

弗罗里达算法思想,想具体知道弗罗里达算法算法自己在网上搜一下吧看吧。

代码

稍微加了一些注释,这个给的代码很简单,应该不用多说吧,不会真的有人看不懂吧

#include #include #define inf 99999999 #define max_element 50 int e[max_element][max_element]; //保存地图的数组 int path_e[max_element][max_element], path_t[max_element][max_element];//转折点的路径 double t[max_element][max_element]; //保存地图的速度 void Menu(); void Old_Map(); void New_Map(); void Floyd(int (*e)[max_element],double (*t)[max_element], int n); //计算最短路径 void Floyd_dist(int (*e)[max_element], int n, int start, int end); void Floyd_time(double (*e)[max_element], int n, int start, int end); int main() { int Mu=5; Menu(); while(scanf("%d", &Mu), Mu!=0) { switch(Mu)//菜单选项 { case 1: Old_Map();break; case 2: New_Map();break; case 3: system("cls");break; default:printf("\n请输入正确指令!!!");break; } Menu(); } printf("\n成功退出!"); return 0; } void Menu() { printf("\n ---选择使用已保存的地图:1---"); printf("\n\n ---选择重新录入地图信息:2---\n"); printf("\n -----------清屏:3-----------\n"); printf("\n -------------退出:0-------------\n"); } //使用原有地图 void Old_Map() { int i, j; FILE *fp; int count = 0; //读入文档count.txt if((fp=fopen("C:\\Users\\jin\\Desktop\\count.txt","r")) == NULL) { printf("File open failed!\n"); exit(0); } fscanf(fp,"%d", &count);//读入点数 fclose(fp); printf("顶点个数 == %d\n", count); if(count == 0 ) { printf("\n信息读入错误!!\n错误原因:没有已保存的地图,请选择重新输入地图信息!!\n"); return ; } ///读入文档map.txt if((fp=fopen("C:\\Users\\jin\\Desktop\\map.txt","r")) == NULL) { printf("File open failed!\n"); exit(0); } for(i = 1; i %d", end); printf("\n___________________________________________\n"); } void Floyd_time(double (*t)[max_element], int n, int start, int end) { int k, i, j; ///佛洛依德算法---时间 for(k = 1; k


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有